﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using SGAEntidades;
using SGABDUtil;
using SGAInterfaces;

namespace SGAAccesoDatos
{
    public class ImplementacionLocalDetalle : IImplementacionLocalDetalle
    {
        #region Miembros de IImplementacionLocalDetalle

        public bool Registrar(ImplementacionLocalDetalleInfo oImplementacionLocalDetalle, SqlTransaction trx)
        {
            var bExito = false;
            var sqlParm = new SqlParameter[8];

            try
            {
                sqlParm[0] = new SqlParameter("@Id_Implementacion", SqlDbType.VarChar);
                if (oImplementacionLocalDetalle.IdImplementacion != null)
                    sqlParm[0].Value = oImplementacionLocalDetalle.IdImplementacion;
                else
                    sqlParm[0].Value = DBNull.Value;

                sqlParm[1] = new SqlParameter("@Item", SqlDbType.Int);
                if (oImplementacionLocalDetalle.Item.HasValue)
                    sqlParm[1].Value = oImplementacionLocalDetalle.Item;
                else
                    sqlParm[1].Value = DBNull.Value;

                sqlParm[2] = new SqlParameter("@Descripcion", SqlDbType.VarChar);
                if (oImplementacionLocalDetalle.Descripcion != null)
                    sqlParm[2].Value = oImplementacionLocalDetalle.Descripcion;
                else
                    sqlParm[2].Value = DBNull.Value;

                sqlParm[3] = new SqlParameter("@Fecha_Inicio", SqlDbType.DateTime);
                if (oImplementacionLocalDetalle.FechaInicio.HasValue)
                    sqlParm[3].Value = oImplementacionLocalDetalle.FechaInicio;
                else
                    sqlParm[3].Value = DBNull.Value;

                sqlParm[4] = new SqlParameter("@Fecha_Fin", SqlDbType.DateTime);
                if (oImplementacionLocalDetalle.FechaFin.HasValue)
                    sqlParm[4].Value = oImplementacionLocalDetalle.FechaFin;
                else
                    sqlParm[4].Value = DBNull.Value;

                sqlParm[5] = new SqlParameter("@Finalizado", SqlDbType.VarChar);
                if (oImplementacionLocalDetalle.IdImplementacion != null)
                    sqlParm[5].Value = oImplementacionLocalDetalle.Finalizado;
                else
                    sqlParm[5].Value = DBNull.Value;

                sqlParm[6] = new SqlParameter("@Observaciones", SqlDbType.VarChar);
                if (oImplementacionLocalDetalle.IdImplementacion != null)
                    sqlParm[6].Value = oImplementacionLocalDetalle.Observaciones;
                else
                    sqlParm[6].Value = DBNull.Value;

                sqlParm[7] = new SqlParameter("@Usuario_Sistema", SqlDbType.VarChar);
                if (oImplementacionLocalDetalle.UsuarioSistema != null)
                    sqlParm[7].Value = oImplementacionLocalDetalle.UsuarioSistema;
                else
                    sqlParm[7].Value = DBNull.Value;

                SqlHelper.ExecuteNonQuery(trx, CommandType.StoredProcedure, "SGA_SP_REGISTRAR_IMPLEMENTACION_LOCAL_DETALLE", sqlParm);
                bExito = true;
            }
            catch (Exception)
            {
                trx.Rollback();
            }
            return bExito;
        }

        public IList<ImplementacionLocalDetalleInfo> Listar(ImplementacionLocalDetalleInfo oImplementacionLocalDetalle)
        {
            var sqlParm = new SqlParameter[1];
            var oListaImplementacioDetalle = new List<ImplementacionLocalDetalleInfo>();

            sqlParm[0] = new SqlParameter("@Id_Implementacion", SqlDbType.VarChar);
            if (oImplementacionLocalDetalle.IdImplementacion != null) { sqlParm[0].Value = oImplementacionLocalDetalle.IdImplementacion; } else { sqlParm[0].Value = DBNull.Value; }

            using (
                var drd = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringDistributedTransaction,
                                                  CommandType.StoredProcedure,
                                                  "SGA_SP_CONSULTAR_IMPLEMENTACION_LOCAL_DETALLE", sqlParm))
            {
                if (drd != null)
                {
                    if (drd.HasRows)
                    {
                        while (drd.Read())
                        {
                            oListaImplementacioDetalle.Add(new ImplementacionLocalDetalleInfo(drd.GetString(0).Trim(), Int32.Parse(drd.GetValue(1).ToString()), 
                                drd.GetString(2).Trim(), drd.GetDateTime(3), drd.GetDateTime(4), drd.GetString(5).Trim(), drd.GetString(6).Trim(), null));
                        }
                    }
                }
            }
            return oListaImplementacioDetalle;
        }

        #endregion
    }
}
